home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Ebooks / Thinking in C++ V2 / C20 / WordCount.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-25  |  992 b   |  41 lines

  1. //: C20:WordCount.cpp
  2. // From Thinking in C++, 2nd Edition
  3. // Available at http://www.BruceEckel.com
  4. // (c) Bruce Eckel 1999
  5. // Copyright notice in Copyright.txt
  6. //{L} StreamTokenizer
  7. // Count occurrences of words using a map
  8. #include "StreamTokenizer.h"
  9. #include "../require.h"
  10. #include <string>
  11. #include <map>
  12. #include <iostream>
  13. #include <fstream>
  14. using namespace std;
  15.  
  16. class Count {
  17.   int i;
  18. public:
  19.   Count() : i(0) {}
  20.   void operator++(int) { i++; } // Post-increment  
  21.   int& val() { return i; }
  22. };
  23.  
  24. typedef map<string, Count> WordMap;
  25. typedef WordMap::iterator WMIter;
  26.  
  27. int main(int argc, char* argv[]) {
  28.   requireArgs(argc, 1);
  29.   ifstream in(argv[1]);
  30.   assure(in, argv[1]);
  31.   StreamTokenizer words(in);
  32.   WordMap wordmap;
  33.   string word;
  34.   while((word = words.next()).size() != 0)
  35.     wordmap[word]++;
  36.   for(WMIter w = wordmap.begin(); 
  37.       w != wordmap.end(); w++)
  38.     cout << (*w).first << ": "
  39.       << (*w).second.val() << endl;
  40. } ///:~
  41.